home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1995 August: Tool Chest / Dev.CD Aug 95 TC / Dev.CD Aug 95 TC.toast / Tool Chest / Interfaces / UniversalInterfaces 2.0 / PInterfaces / ColorPicker.p < prev    next >
Encoding:
Text File  |  1995-04-18  |  11.4 KB  |  475 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        ColorPicker.p
  3.  
  4.      Contains:    Color Picker package Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Package:    Universal Interfaces 2.0 in “MPW Latest” on ETO #17
  8.  
  9.      Copyright:    © 1984-1995 by Apple Computer, Inc.
  10.                  All rights reserved.
  11.  
  12.      Bugs?:        If you find a problem with this file, use the Apple Bug Reporter
  13.                  stack.  Include the file and version information (from above)
  14.                  in the problem description and send to:
  15.                      Internet:    apple.bugs@applelink.apple.com
  16.                      AppleLink:    APPLE.BUGS
  17.  
  18. }
  19.  
  20. {$IFC UNDEFINED UsingIncludes}
  21. {$SETC UsingIncludes := 0}
  22. {$ENDC}
  23.  
  24. {$IFC NOT UsingIncludes}
  25.  UNIT ColorPicker;
  26.  INTERFACE
  27. {$ENDC}
  28.  
  29. {$IFC UNDEFINED __COLORPICKER__}
  30. {$SETC __COLORPICKER__ := 1}
  31.  
  32. {$I+}
  33. {$SETC ColorPickerIncludes := UsingIncludes}
  34. {$SETC UsingIncludes := 1}
  35.  
  36.  
  37. {$IFC UNDEFINED __QUICKDRAW__}
  38. {$I Quickdraw.p}
  39. {$ENDC}
  40. {    Types.p                                                        }
  41. {        ConditionalMacros.p                                        }
  42. {    MixedMode.p                                                    }
  43. {    QuickdrawText.p                                                }
  44.  
  45. {$IFC UNDEFINED __MIXEDMODE__}
  46. {$I MixedMode.p}
  47. {$ENDC}
  48.  
  49. {$IFC UNDEFINED __WINDOWS__}
  50. {$I Windows.p}
  51. {$ENDC}
  52. {    Memory.p                                                    }
  53. {    Events.p                                                    }
  54. {        OSUtils.p                                                }
  55. {    Controls.p                                                    }
  56. {        Menus.p                                                    }
  57.  
  58. {$IFC UNDEFINED __DIALOGS__}
  59. {$I Dialogs.p}
  60. {$ENDC}
  61. {    Errors.p                                                    }
  62. {    TextEdit.p                                                    }
  63.  
  64. {$IFC UNDEFINED __CMAPPLICATION__}
  65. {$I CMApplication.p}
  66. {$ENDC}
  67. {    Printing.p                                                    }
  68.  
  69. {$IFC UNDEFINED __BALLOONS__}
  70. {$I Balloons.p}
  71. {$ENDC}
  72.  
  73. {$PUSH}
  74. {$ALIGN MAC68K}
  75. {$LibExport+}
  76.  
  77. CONST
  78. {Maximum small fract value, as long}
  79.     MaxSmallFract                = $0000FFFF;
  80.  
  81.     kDefaultWidth                = 383;
  82.     kDefaultHeight                = 238;
  83.  
  84.     kDidNothing                    = 0;
  85.     kColorChanged                = 1;
  86.     kOkHit                        = 2;
  87.     kCancelHit                    = 3;
  88.     kNewPickerChosen            = 4;
  89.     kApplItemHit                = 5;
  90.  
  91.     
  92. TYPE
  93.     PickerAction = INTEGER;
  94.  
  95.  
  96. CONST
  97.     kOriginalColor                = 0;
  98.     kNewColor                    = 1;
  99.  
  100.     
  101. TYPE
  102.     ColorType = INTEGER;
  103.  
  104.  
  105. CONST
  106.     kCut                        = 0;
  107.     kCopy                        = 1;
  108.     kPaste                        = 2;
  109.     kClear                        = 3;
  110.     kUndo                        = 4;
  111.  
  112.     
  113. TYPE
  114.     EditOperation = INTEGER;
  115.  
  116.  
  117. CONST
  118.     kMouseDown                    = 0;
  119.     kKeyDown                    = 1;
  120.     kFieldEntered                = 2;
  121.     kFieldLeft                    = 3;
  122.     kCutOp                        = 4;
  123.     kCopyOp                        = 5;
  124.     kPasteOp                    = 6;
  125.     kClearOp                    = 7;
  126.     kUndoOp                        = 8;
  127.  
  128.     
  129. TYPE
  130.     ItemModifier = INTEGER;
  131.  
  132.  
  133. CONST
  134.     kAtSpecifiedOrigin            = 0;
  135.     kDeepestColorScreen            = 1;
  136.     kCenterOnMainScreen            = 2;
  137.  
  138.     
  139. TYPE
  140.     DialogPlacementSpec = INTEGER;
  141.  
  142.  
  143. CONST
  144.     DialogIsMoveable            = 1;
  145.     DialogIsModal                = 2;
  146.     CanModifyPalette            = 4;
  147.     CanAnimatePalette            = 8;
  148.     AppIsColorSyncAware            = 16;
  149.     InSystemDialog                = 32;
  150.     InApplicationDialog            = 64;
  151.     InPickerDialog                = 128;
  152.     DetachedFromChoices            = 256;
  153.     CanDoColor                    = 1;
  154.     CanDoBlackWhite                = 2;
  155.     AlwaysModifiesPalette        = 4;
  156.     MayModifyPalette            = 8;
  157.     PickerIsColorSyncAware        = 16;
  158.     CanDoSystemDialog            = 32;
  159.     CanDoApplDialog                = 64;
  160.     HasOwnDialog                = 128;
  161.     CanDetach                    = 256;
  162.  
  163.     kNoForcast                    = 0;
  164.     kMenuChoice                    = 1;
  165.     kDialogAccept                = 2;
  166.     kDialogCancel                = 3;
  167.     kLeaveFocus                    = 4;
  168.     kPickerSwitch                = 5;
  169.     kNormalKeyDown                = 6;
  170.     kNormalMouseDown            = 7;
  171.  
  172.     
  173. TYPE
  174.     EventForcaster = INTEGER;
  175.  
  176. { A SmallFract value is just the fractional part of a Fixed number,
  177. which is the low order word.  SmallFracts are used to save room,
  178. and to be compatible with Quickdraw's RGBColor.  They can be
  179. assigned directly to and from INTEGERs. }
  180. { Unsigned fraction between 0 and 1 }
  181.     SmallFract = INTEGER;
  182.  
  183. { For developmental simplicity in switching between the HLS and HSV
  184. models, HLS is reordered into HSL. Thus both models start with
  185. hue and saturation values; value/lightness/brightness is last. }
  186.     HSVColor = RECORD
  187.         hue:                    SmallFract;                                {Fraction of circle, red at 0}
  188.         saturation:                SmallFract;                                {0-1, 0 for gray, 1 for pure color}
  189.         value:                    SmallFract;                                {0-1, 0 for black, 1 for max intensity}
  190.     END;
  191.  
  192.     HSLColor = RECORD
  193.         hue:                    SmallFract;                                {Fraction of circle, red at 0}
  194.         saturation:                SmallFract;                                {0-1, 0 for gray, 1 for pure color}
  195.         lightness:                SmallFract;                                {0-1, 0 for black, 1 for white}
  196.     END;
  197.  
  198.     CMYColor = RECORD
  199.         cyan:                    SmallFract;
  200.         magenta:                SmallFract;
  201.         yellow:                    SmallFract;
  202.     END;
  203.  
  204.     PMColor = RECORD
  205.         profile:                CMProfileHandle;
  206.         color:                    CMColor;
  207.     END;
  208.  
  209.     PMColorPtr = ^PMColor;
  210.  
  211.     picker = Ptr;
  212.  
  213.     PickerIconData = RECORD
  214.         scriptCode:                INTEGER;
  215.         iconSuiteID:            INTEGER;
  216.         helpResType:            ResType;
  217.         helpResID:                INTEGER;
  218.     END;
  219.  
  220.     PickerInitData = RECORD
  221.         pickerDialog:            DialogPtr;
  222.         choicesDialog:            DialogPtr;
  223.         flags:                    LONGINT;
  224.         yourself:                picker;
  225.     END;
  226.  
  227.     PickerMenuItemInfo = RECORD
  228.         editMenuID:                INTEGER;
  229.         cutItem:                INTEGER;
  230.         copyItem:                INTEGER;
  231.         pasteItem:                INTEGER;
  232.         clearItem:                INTEGER;
  233.         undoItem:                INTEGER;
  234.     END;
  235.  
  236.     PickerMenuState = RECORD
  237.         cutEnabled:                BOOLEAN;
  238.         copyEnabled:            BOOLEAN;
  239.         pasteEnabled:            BOOLEAN;
  240.         clearEnabled:            BOOLEAN;
  241.         undoEnabled:            BOOLEAN;
  242.         undoString:                Str255;
  243.     END;
  244.  
  245.     ColorChangedProcPtr = ProcPtr;  { PROCEDURE ColorChanged(userData: LONGINT; VAR newColor: PMColor); }
  246.     UserEventProcPtr = ProcPtr;  { FUNCTION UserEvent(VAR event: EventRecord): BOOLEAN; }
  247.     ColorChangedUPP = UniversalProcPtr;
  248.     UserEventUPP = UniversalProcPtr;
  249.  
  250.     ColorPickerInfo = RECORD
  251.         theColor:                PMColor;
  252.         dstProfile:                CMProfileHandle;
  253.         flags:                    LONGINT;
  254.         placeWhere:                DialogPlacementSpec;
  255.         dialogOrigin:            Point;
  256.         pickerType:                LONGINT;
  257.         eventProc:                UserEventUPP;
  258.         colorProc:                ColorChangedUPP;
  259.         colorProcData:            LONGINT;
  260.         prompt:                    Str255;
  261.         mInfo:                    PickerMenuItemInfo;
  262.         newColorChosen:            BOOLEAN;
  263.         filler:                    SInt8;
  264.     END;
  265.  
  266.     SystemDialogInfo = RECORD
  267.         flags:                    LONGINT;
  268.         pickerType:                LONGINT;
  269.         placeWhere:                DialogPlacementSpec;
  270.         dialogOrigin:            Point;
  271.         mInfo:                    PickerMenuItemInfo;
  272.     END;
  273.  
  274.     PickerDialogInfo = RECORD
  275.         flags:                    LONGINT;
  276.         pickerType:                LONGINT;
  277.         dialogOrigin:            ^Point;
  278.         mInfo:                    PickerMenuItemInfo;
  279.     END;
  280.  
  281.     ApplicationDialogInfo = RECORD
  282.         flags:                    LONGINT;
  283.         pickerType:                LONGINT;
  284.         theDialog:                DialogPtr;
  285.         pickerOrigin:            Point;
  286.         mInfo:                    PickerMenuItemInfo;
  287.     END;
  288.  
  289.     EventData = RECORD
  290.         event:                    ^EventRecord;
  291.         action:                    PickerAction;
  292.         itemHit:                INTEGER;
  293.         handled:                BOOLEAN;
  294.         filler:                    SInt8;
  295.         colorProc:                ColorChangedUPP;
  296.         colorProcData:            LONGINT;
  297.         forcast:                EventForcaster;
  298.     END;
  299.  
  300.     EditData = RECORD
  301.         theEdit:                EditOperation;
  302.         action:                    PickerAction;
  303.         handled:                BOOLEAN;
  304.         filler:                    SInt8;
  305.     END;
  306.  
  307.     ItemHitData = RECORD
  308.         itemHit:                INTEGER;
  309.         iMod:                    ItemModifier;
  310.         action:                    PickerAction;
  311.         colorProc:                ColorChangedUPP;
  312.         colorProcData:            LONGINT;
  313.         where:                    Point;
  314.     END;
  315.  
  316.     HelpItemInfo = RECORD
  317.         options:                LONGINT;
  318.         tip:                    Point;
  319.         altRect:                Rect;
  320.         theProc:                INTEGER;
  321.         helpVariant:            INTEGER;
  322.         helpMessage:            HMMessageRecord;
  323.     END;
  324.  
  325. {    Below are the color conversion routines.}
  326.  
  327. FUNCTION Fix2SmallFract(f: Fixed): SmallFract;
  328.     {$IFC NOT GENERATINGCFM}
  329.     INLINE $3F3C, $0001, $A82E;
  330.     {$ENDC}
  331. FUNCTION SmallFract2Fix(s: SmallFract): Fixed;
  332.     {$IFC NOT GENERATINGCFM}
  333.     INLINE $3F3C, $0002, $A82E;
  334.     {$ENDC}
  335. PROCEDURE CMY2RGB({CONST}VAR cColor: CMYColor; VAR rColor: RGBColor);
  336.     {$IFC NOT GENERATINGCFM}
  337.     INLINE $3F3C, $0003, $A82E;
  338.     {$ENDC}
  339. PROCEDURE RGB2CMY({CONST}VAR rColor: RGBColor; VAR cColor: CMYColor);
  340.     {$IFC NOT GENERATINGCFM}
  341.     INLINE $3F3C, $0004, $A82E;
  342.     {$ENDC}
  343. PROCEDURE HSL2RGB({CONST}VAR hColor: HSLColor; VAR rColor: RGBColor);
  344.     {$IFC NOT GENERATINGCFM}
  345.     INLINE $3F3C, $0005, $A82E;
  346.     {$ENDC}
  347. PROCEDURE RGB2HSL({CONST}VAR rColor: RGBColor; VAR hColor: HSLColor);
  348.     {$IFC NOT GENERATINGCFM}
  349.     INLINE $3F3C, $0006, $A82E;
  350.     {$ENDC}
  351. PROCEDURE HSV2RGB({CONST}VAR hColor: HSVColor; VAR rColor: RGBColor);
  352.     {$IFC NOT GENERATINGCFM}
  353.     INLINE $3F3C, $0007, $A82E;
  354.     {$ENDC}
  355. PROCEDURE RGB2HSV({CONST}VAR rColor: RGBColor; VAR hColor: HSVColor);
  356.     {$IFC NOT GENERATINGCFM}
  357.     INLINE $3F3C, $0008, $A82E;
  358.     {$ENDC}
  359. {    Below brings up the ColorPicker 1.0 Dialog}
  360. FUNCTION GetColor(where: Point; prompt: ConstStr255Param; {CONST}VAR inColor: RGBColor; VAR outColor: RGBColor): BOOLEAN;
  361.     {$IFC NOT GENERATINGCFM}
  362.     INLINE $3F3C, $0009, $A82E;
  363.     {$ENDC}
  364. {    Below are the ColorPicker 2.0 routines.}
  365. FUNCTION PickColor(VAR theColorInfo: ColorPickerInfo): OSErr;
  366.     {$IFC NOT GENERATINGCFM}
  367.     INLINE $3F3C, $0213, $A82E;
  368.     {$ENDC}
  369. FUNCTION AddPickerToDialog(VAR info: ApplicationDialogInfo; VAR thePicker: picker): OSErr;
  370.     {$IFC NOT GENERATINGCFM}
  371.     INLINE $3F3C, $0414, $A82E;
  372.     {$ENDC}
  373. FUNCTION CreateColorDialog(VAR info: SystemDialogInfo; VAR thePicker: picker): OSErr;
  374.     {$IFC NOT GENERATINGCFM}
  375.     INLINE $3F3C, $0415, $A82E;
  376.     {$ENDC}
  377. FUNCTION CreatePickerDialog(VAR info: PickerDialogInfo; VAR thePicker: picker): OSErr;
  378.     {$IFC NOT GENERATINGCFM}
  379.     INLINE $3F3C, $0416, $A82E;
  380.     {$ENDC}
  381. FUNCTION DisposeColorPicker(thePicker: picker): OSErr;
  382.     {$IFC NOT GENERATINGCFM}
  383.     INLINE $3F3C, $0217, $A82E;
  384.     {$ENDC}
  385. FUNCTION GetPickerVisibility(thePicker: picker; VAR visible: BOOLEAN): OSErr;
  386.     {$IFC NOT GENERATINGCFM}
  387.     INLINE $3F3C, $0418, $A82E;
  388.     {$ENDC}
  389. FUNCTION SetPickerVisibility(thePicker: picker; visible: INTEGER): OSErr;
  390.     {$IFC NOT GENERATINGCFM}
  391.     INLINE $3F3C, $0319, $A82E;
  392.     {$ENDC}
  393. FUNCTION SetPickerPrompt(thePicker: picker; VAR promptString: Str255): OSErr;
  394.     {$IFC NOT GENERATINGCFM}
  395.     INLINE $3F3C, $041a, $A82E;
  396.     {$ENDC}
  397. FUNCTION DoPickerEvent(thePicker: picker; VAR data: EventData): OSErr;
  398.     {$IFC NOT GENERATINGCFM}
  399.     INLINE $3F3C, $041b, $A82E;
  400.     {$ENDC}
  401. FUNCTION DoPickerEdit(thePicker: picker; VAR data: EditData): OSErr;
  402.     {$IFC NOT GENERATINGCFM}
  403.     INLINE $3F3C, $041c, $A82E;
  404.     {$ENDC}
  405. FUNCTION DoPickerDraw(thePicker: picker): OSErr;
  406.     {$IFC NOT GENERATINGCFM}
  407.     INLINE $3F3C, $021d, $A82E;
  408.     {$ENDC}
  409. FUNCTION GetPickerColor(thePicker: picker; whichColor: ColorType; VAR color: PMColor): OSErr;
  410.     {$IFC NOT GENERATINGCFM}
  411.     INLINE $3F3C, $051e, $A82E;
  412.     {$ENDC}
  413. FUNCTION SetPickerColor(thePicker: picker; whichColor: ColorType; VAR color: PMColor): OSErr;
  414.     {$IFC NOT GENERATINGCFM}
  415.     INLINE $3F3C, $051f, $A82E;
  416.     {$ENDC}
  417. FUNCTION GetPickerOrigin(thePicker: picker; VAR where: Point): OSErr;
  418.     {$IFC NOT GENERATINGCFM}
  419.     INLINE $3F3C, $0420, $A82E;
  420.     {$ENDC}
  421. FUNCTION SetPickerOrigin(thePicker: picker; where: Point): OSErr;
  422.     {$IFC NOT GENERATINGCFM}
  423.     INLINE $3F3C, $0421, $A82E;
  424.     {$ENDC}
  425. FUNCTION GetPickerProfile(thePicker: picker; VAR profile: CMProfileHandle): OSErr;
  426.     {$IFC NOT GENERATINGCFM}
  427.     INLINE $3F3C, $0422, $A82E;
  428.     {$ENDC}
  429. FUNCTION SetPickerProfile(thePicker: picker; profile: CMProfileHandle): OSErr;
  430.     {$IFC NOT GENERATINGCFM}
  431.     INLINE $3F3C, $0423, $A82E;
  432.     {$ENDC}
  433. FUNCTION GetPickerEditMenuState(thePicker: picker; VAR mState: PickerMenuState): OSErr;
  434.     {$IFC NOT GENERATINGCFM}
  435.     INLINE $3F3C, $0424, $A82E;
  436.     {$ENDC}
  437. FUNCTION ExtractPickerHelpItem(thePicker: picker; itemNo: INTEGER; whichState: INTEGER; VAR helpInfo: HelpItemInfo): OSErr;
  438.     {$IFC NOT GENERATINGCFM}
  439.     INLINE $3F3C, $0625, $A82E;
  440.     {$ENDC}
  441. CONST
  442.     uppColorChangedProcInfo = $000003C0; { PROCEDURE (4 byte param, 4 byte param); }
  443.     uppUserEventProcInfo = $000000D0; { FUNCTION (4 byte param): 1 byte result; }
  444.  
  445. FUNCTION NewColorChangedProc(userRoutine: ColorChangedProcPtr): ColorChangedUPP;
  446.     {$IFC NOT GENERATINGCFM }
  447.     INLINE $2E9F;
  448.     {$ENDC}
  449.  
  450. FUNCTION NewUserEventProc(userRoutine: UserEventProcPtr): UserEventUPP;
  451.     {$IFC NOT GENERATINGCFM }
  452.     INLINE $2E9F;
  453.     {$ENDC}
  454.  
  455. PROCEDURE CallColorChangedProc(userData: LONGINT; VAR newColor: PMColor; userRoutine: ColorChangedUPP);
  456.     {$IFC NOT GENERATINGCFM}
  457.     INLINE $205F, $4E90;
  458.     {$ENDC}
  459.  
  460. FUNCTION CallUserEventProc(VAR event: EventRecord; userRoutine: UserEventUPP): BOOLEAN;
  461.     {$IFC NOT GENERATINGCFM}
  462.     INLINE $205F, $4E90;
  463.     {$ENDC}
  464.  
  465. {$ALIGN RESET}
  466. {$POP}
  467.  
  468. {$SETC UsingIncludes := ColorPickerIncludes}
  469.  
  470. {$ENDC} {__COLORPICKER__}
  471.  
  472. {$IFC NOT UsingIncludes}
  473.  END.
  474. {$ENDC}
  475.